package top.fzqblog.clazz

import kotlin.properties.Delegates

/**
 * Created by 抽离 on 2017/8/2 0002.
 */
/**
 * 代理属性 观察者模式
 */
class User {
    var name: String by Delegates.observable("<no name>") {
        prop,old,new -> println("$prop： $old -> $new")
    }

    var age: Int by Delegates.vetoable(0) {//进行截断，使其达到条件才能够修改属性
        prop, old, new ->
        println("$old -> $new")
        if (new < 20) true else false
    }
}
fun main(args: Array<String>) {
    val user = User()
//    user.name = "first"
//    user.name = "second"

    user.age = 10   //  0 -> 10
    println(user.age)   //  10
    user.age = 20   //  10 -> 20
    println(user.age)   //  20
}